package com.designpattern.decoration.two;

/**
 * 装饰器模式
 */
public class Main {

    /**
     * 动态的给一个对象添加一些格外的职责，就新增功能来说，他比新生成子类 更加灵活。
     * 因为只要实现了 Decorator 的子类，都可以被添加。 而生成子类有类型限制
     *
     * @param args
     */
    public static void main(String[] args) {
        // 基本功能
        ConnectComponet c = new ConnectComponet();
        // 装饰1
        DecoratorA a = new DecoratorA();
        // 装饰2
        DecoratorB b = new DecoratorB();

        /**
         * 装饰的方法是： ConnectComponet 示例化 c
         * 然后用示例化的a 来包装c
         * 再用实例化的b 包装 a
         * 最终执行b的 operation()
         */
        a.setComponet(c);
        b.setComponet(a);

        b.setOper("新增操作");
        b.operation();
    }
}
